package io;

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

/*
 * 缓冲输出流写出数据和缓冲区问题
 * */
public class FlushDemo {
    public static void main(String[] args) throws IOException {
        //当前是覆盖写
        FileOutputStream fileOutputStream = new FileOutputStream("test.txt");
        //创建高级流 缓存流实例 用来提高输出速度
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
        String str = "今天天气真好1";
        //将str中的字符串转换为字节存放在byt数组当中
        byte[] byt = str.getBytes(StandardCharsets.UTF_8);
        /*
         * 缓冲字节流
         * BufferedOutputStream缓冲流中 会有一个缓存区 缓存区是一个byte数组长度为8kb，当缓存区没有满时BufferedOutputStream并不会直接将数据写入到文件当中
         * 如果需要立即向文件中写入数据 需要使用flush()方法
         * bufferedOutputStream.flush() 立即将缓存区中的字节写入到文件中
         * (流在关闭时会自动调用一次flush方法的)
         *
         * 其实缓冲流大多数使用在 某高级流->某高级流->某高级流->缓冲流
         *  将上述处理好的数据 暂时在缓冲流的缓存区中暂时保存当缓存满了之后 在调用文件流写入(写出)数据
         *  如果单纯地就操作缓冲流就不存在意义 直接使用块写/块存就好了
         *  */
        bufferedOutputStream.write(byt);
        bufferedOutputStream.close();
    }
}
